New dialog to select anything from any stringlist.
authoroliskoli <oliskoli@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Tue, 6 Dec 2005 00:41:36 +0000 (00:41 +0000)
committeroliskoli <oliskoli@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Tue, 6 Dec 2005 00:41:36 +0000 (00:41 +0000)
gpsbabel/win32/gui-2/select.dfm [new file with mode: 0644]
gpsbabel/win32/gui-2/select.pas [new file with mode: 0644]

diff --git a/gpsbabel/win32/gui-2/select.dfm b/gpsbabel/win32/gui-2/select.dfm
new file mode 100644 (file)
index 0000000..7544131
Binary files /dev/null and b/gpsbabel/win32/gui-2/select.dfm differ
diff --git a/gpsbabel/win32/gui-2/select.pas b/gpsbabel/win32/gui-2/select.pas
new file mode 100644 (file)
index 0000000..ce1cb28
--- /dev/null
@@ -0,0 +1,143 @@
+unit select;\r
+\r
+interface\r
+\r
+uses\r
+  gnugettext, gnugettextDx,\r
+  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,\r
+  StdCtrls, Buttons, ExtCtrls;\r
+\r
+type\r
+  TfrmSelect = class(TForm)\r
+    pnTop: TPanel;\r
+    pnBottom: TPanel;\r
+    lbSelect: TListBox;\r
+    btnOK: TBitBtn;\r
+    btnCancel: TBitBtn;\r
+    procedure FormCreate(Sender: TObject);\r
+    procedure FormShow(Sender: TObject);\r
+  private\r
+    { Private declarations }\r
+  public\r
+    { Public declarations }\r
+  end;\r
+\r
+var\r
+  frmSelect: TfrmSelect;\r
+\r
+function SelectFromStringList(const Title: string; List: TStrings; var Str: string): Boolean;\r
+function SelectLanguage(const Title: string; const Builtin: TStrings; var Lang: string; const Default: string = ''): Boolean;\r
+\r
+implementation\r
+\r
+{$R *.DFM}\r
+\r
+function SelectFromStringList(const Title: string; List: TStrings; var Str: string): Boolean;\r
+var\r
+  i, res: Integer;\r
+\r
+begin\r
+  Application.CreateForm(TfrmSelect, frmSelect);\r
+  try\r
+    frmSelect.Caption := Title;\r
+    frmSelect.lbSelect.Items.Assign(List);\r
+    frmSelect.ActiveControl := frmSelect.lbSelect;\r
+    if (str <> '') then\r
+    begin\r
+      i := frmSelect.lbSelect.Items.IndexOf(str);\r
+      if (i >= 0) then\r
+        frmSelect.lbSelect.ItemIndex := i;\r
+    end;\r
+    res := frmSelect.ShowModal;\r
+    Result := (res = mrOk);\r
+    i := frmSelect.lbSelect.ItemIndex;\r
+    if Result and (i >= 0) then\r
+      Str := frmSelect.lbSelect.Items[i];\r
+  finally\r
+    frmSelect.Release;\r
+  end;\r
+end;\r
+\r
+function SelectLanguage(const Title: string; const Builtin: TStrings; var Lang: string; const Default: string = ''): Boolean;\r
+var\r
+  i: Integer;\r
+  s, sx, sy: string;\r
+  l: TStrings;\r
+\r
+begin\r
+  Result := False;\r
+\r
+  if (Default = '') then\r
+    Lang := Copy(gnugettext.GetCurrentLanguage, 1, 2);\r
+\r
+  l := TStringList.Create;\r
+  try\r
+    sy := '';\r
+    for i := 0 to Builtin.Count - 1 do\r
+    begin\r
+      s := Builtin.Strings[i];\r
+      if (s = '') then Continue;\r
+\r
+      if (CompareText(s, 'de') = 0) then sx := 'German' else\r
+      if (CompareText(s, 'fr') = 0) then sx := 'French' else\r
+      if (CompareText(s, 'en') = 0) then sx := 'English' else\r
+        sx := '???';\r
+\r
+      sx := Format('%s - %s', [s, sx]);\r
+      if (CompareText(s, Lang) = 0) then sy := sx;\r
+\r
+      l.Add(sx);\r
+    end;\r
+\r
+    if SelectFromStringList(Title, l, sy) then\r
+    begin\r
+      Lang := Copy(sy, 1, 2);\r
+      Result := True;\r
+    end;\r
+\r
+  finally\r
+    l.Free;\r
+  end;\r
+end;\r
+\r
+{ TfrmSelect }\r
+\r
+procedure TfrmSelect.FormCreate(Sender: TObject);\r
+begin\r
+  TranslateComponent(Self);\r
+\r
+// !!! work-arround !!!\r
+  btnOK.Caption := dgettext('delphi', 'OK');\r
+  btnCancel.Caption := dgettext('delphi', 'Abort');\r
+// !!! work-arround !!!\r
+end;\r
+\r
+procedure TfrmSelect.FormShow(Sender: TObject);\r
+var\r
+  i: Integer;\r
+  s: string;\r
+  t: TLabel;\r
+begin\r
+  t := TLabel.Create(Self);\r
+  try\r
+\r
+     t.Caption := '';\r
+     t.Font := lbSelect.Font;\r
+     t.ParentFont := lbSelect.ParentFont;\r
+     t.Parent := lbSelect.Parent;\r
+\r
+     for i := 0 to lbSelect.Items.Count - 1 do\r
+     begin\r
+       s := Copy(lbSelect.Items[i], 1, 4);\r
+       while (t.Canvas.TextWidth(s) < 32) do\r
+         s := s + ' ';\r
+       s := s + Copy(lbSelect.Items[i], 5, 256);\r
+       lbSelect.Items[i] := s;\r
+     end;\r
+     \r
+  finally\r
+    t.Free;\r
+  end;\r
+end;\r
+\r
+end.\r